ÉeÉNÉjÉJÉãQ&A

TB 59 - ÉvÉâÉOÉCÉìÉÅÉjÉÖÅ[çÄñ⁄Ç™ÉRÉìÉeÉNÉXÉgǫǮÇËÇ…ï\é¶Ç≥ÇÍǻǢ
(1999 îN 2 åé 8 ì˙)


Q: éÑÇ™çÏê¨ÇµÇΩÉRÉìÉeÉNÉXÉgÉÅÉjÉÖÅ[ÉvÉâÉOÉCÉìÇégópÇ∑ÇÈÇΔÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ÇÊǡǃÇÕǪÇÃÉÅÉjÉÖÅ[çÄñ⁄Ç™Åuï\é¶Ç≥ÇÍÇÈïKóvÇÃǻǢèÍñ Ç≈Åvï\é¶Ç≥ÇÍǃǵNjǢNjÇ∑ÅBÇ‹ÇΩÅAéÑÇ™çÏê¨ÇµÇΩÉvÉâÉOÉCÉìÉÅÉjÉÖÅ[çÄñ⁄Çà 1 ǬÇëIëÇ∑ÇÈÇΔÅAÉvÉâÉOÉCÉìÇ…ìnÇ≥ÇÍÇΩÉfÅ[É^ÇíäèoÇ®ÇÊÇ—èàóùǵÇÊǧÇΔÇ∑ÇÈç€Ç…ÅAñæÇÁǩDžìÆçÏÇ™óêÇÍÇ‹Ç∑ÅBDZÇÍÇÕǫǧǢǧDZÇΔÇ≈ǵÇÂǧǩÅH

A: í èÌÅADZÇÃåªè€ÇÕÅAÅuÉvÉâÉOÉCÉìÇ…ìnÇ≥ÇÍÇÈÉfÉXÉNÉäÉvÉ^ì‡ÇÃï°çáÉfÅ[É^ÅvÇΔÅuApple Event Manager ÇÃÉoÉOÅvÇÃóºï˚Ç™å¥àˆÇΔǻǡǃǢNjÇ∑ÅB
ñ‚ëËÇÃÉvÉâÉOÉCÉìÇ…ëŒÇµÅAdžÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇ©ÇÁ typeAERecord ÇΔǢǧÉfÉXÉNÉäÉvÉ^Ç™ìnÇ≥ÇÍÇÈDZÇΔǙdžÇËÇ‹Ç∑ÅBé¿ç€ÇÃÇΔDZÇÎÅADZÇÃÉfÉXÉNÉäÉvÉ^ÇÕäeÉäÉXÉgçÄñ⁄ÇΔÉLÅ[ÉèÅ[ÉhÇÃä÷òAÇãLǵÇΩÅuÉfÉXÉNÉäÉvÉ^ÉäÉXÉgÅvÇ…Ç∑ǨNjÇπÇÒÅBé©ï™Ç≈çÏê¨ÇµÇΩÉRÅ[ÉhÇ™ typeAERecord ÇìnÇ≥ÇÍÇΩDZÇΔÇåüèoÇ≈ǴǻǢèÍçáÇÕÅAÇŸÇ©ÇÃÉfÅ[É^å^ÇΔǵǃã≠êßìIÇ…èàóùǵÇÊǧÇΔǵNjÇ∑ÅBDZÇÃã≠êßèàóùÇÕÅAñæé¶ìIǻLJÇÃÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅBÉfÉXÉNÉäÉvÉ^ÉäÉXÉgçÄñ⁄Çì¡íËÇÃÉfÅ[É^å^ÇΔǵǃóvãÅÇ∑ÇÈÇΔÅAǪÇÃéwíËǫǮÇËÅAâΩÇÃÉÅÉbÉZÅ[ÉWLJǻÇ≠ã≠êßìIÇ…èàóùÇ≥ÇÍÇÈÇΔǢǧDZÇΔÇäoǶǃǮǢǃÇ≠ÇæÇ≥Ç¢ÅBí èÌÅAã≠êßèàóùÇ™ãNDZǡǃLJé¿äQÇÕdžÇËÇ‹ÇπÇÒÇ™ÅAÇ≤éøñ‚ÇÃó·Ç≈ÇÕïsìsçáǙdžÇËÇ‹Ç∑ÅBǪÇÃóùóRÇÕÅAéüÇà 2 ǬÇ≈Ç∑ÅB

  1. Apple Event Manager Ç…ÇÕÉoÉOǙdžÇËÅAtypeAERecord ÉfÉXÉNÉäÉvÉ^ÇÇ«ÇÃÇÊǧǻå^ÇΔǵǃóvãÅǵǃLJÅAǪÇÃóvãÅǫǮÇËÇ…èàóùÇ∑ÇÈÇÊǧDžå©Ç¶ÇÈÅBǵǩǵÅAé¿ç€Ç…ÇÕã≠êßèàóùÇÕâΩLJçsÇÌÇÍǃǢǻǢÅB
  2. typeAERecord ÇÕÉäÉXÉgÇ≈ǵǩǻǢÅBǪÇÃÇΩÇflÅAÉäÉXÉgëSëÃÇ 1 ǬÇÃçÄñ⁄ÇΔǵǃã≠êßèàóùÇééÇ›ÇÈÇÊÇËÇÕÅAÉäÉXÉgÇÃçÄñ⁄ÇÉgÉâÉoÅ[ÉXǵǃÅAÇ«ÇÃÇÊǧǻçÄñ⁄Ç™é˚ÇflÇÁÇÍǃǢÇÈÇ©Çîcà¨ÇµÇƒÇ®Ç¢ÇΩǟǧǙÇÊÇ¢ÅB
DZDZÇ≈ÅAçÏê¨ÇµÇΩÉvÉâÉOÉCÉìÇ™ÉtÉ@ÉCÉãÉVÉXÉeÉÄÉIÉuÉWÉFÉNÉg (ÉtÉ@ÉCÉãÅAÉtÉHÉãÉ_ÅAÉ{ÉäÉÖÅ[ÉÄ) ÇÃèàóùÇééÇ›ÇÈÇΔâºíËǵNjǵÇÂǧÅBǮǪÇÁÇ≠ÅAÉvÉâÉOÉCÉìÇÕ typeAlias Ç™ìnÇ≥ÇÍÇΩǩǫǧǩÇîªífǵÇÊǧÇΔǵNjÇ∑ÅBLJǵLJDZDZÇ≈ typeAERecord Ç™îÒñæé¶ìIÇ… typeAlias Ç…ïœä∑Ç≥ÇÍÇÈÇΔÅAApple Event Manager ÇÃÉoÉOÇ™åªÇÍÇÈÇæÇØÇ≈çœÇ‹Ç∏Ç…ìÆçÏÇ™ç¨óêǵNjÇ∑ÅBǵǩǵÅAApple Event Manager Ç…ÉoÉOÇ™ë∂ç›ÇµÇ»Ç¢ÇΔǵǃLJÅAǪÇÃÉvÉâÉOÉCÉìÇÕ typeAlias ÉfÉXÉNÉäÉvÉ^Ç…ñÑÇflçûÇ‹ÇÍÇΩÉäÉXÉgÇèàóùÇ∑ÇÈã@âÔÇé∏ǢNjÇ∑ÅB

DZDZÇ≈è–âÓÇ∑ÇÈÉRÅ[ÉhÇÕÅAçÄñ⁄Ç™ñÑÇflçûÇ‹ÇÍÇΩÉäÉXÉgÇìKêÿÇ…ÉgÉâÉoÅ[ÉXÇ∑ÇÈï˚ñ@Çé¶Ç∑LJÇÃÇ≈Ç∑ÅBDZÇÃÉRÅ[ÉhÇ…ÇÕÅAApple Event Manager ÇÃÉoÉOÇâÒîÇ∑ÇÈÇΔǢǧìÒéüìIÇ»å¯ópLJdžÇËÇ‹Ç∑ÅB


static pascal OSStatus SearchForAcceptableDescriptors
    (DescType acceptableDescType, const AEDesc *desc, Boolean *allOK)
{
    OSStatus err = noErr;

    *allOK = true;

    if (desc->descriptorType != acceptableDescType)
    {
        if (desc->descriptorType == typeAERecord || desc->descriptorType == typeAEList)
        {
            long index;

            if (!(err = AECountItems (desc,&index)) && index) do
            {
                AEDesc      nthDesc;
                AEKeyword   keyword;
                OSStatus    err2;

                err = AEGetNthDesc (desc,index,typeWildCard,&keyword,&nthDesc);
                if (err) break;
                err = SearchForAcceptableDescriptors (acceptableDescType,&nthDesc,allOK);
                err2 = AEDisposeDesc (&nthDesc);
                if (err) break;
                err = err2;
                if (err) break;
                if (!*allOK) break;
            }
            while (--index);
        }
        else
        {
            AEDesc coerced;

            if (!(err = AECoerceDesc (desc,acceptableDescType,&coerced)))
                err = AEDisposeDesc (&coerced);
            else if (err == errAECoercionFail)
            {
                err = noErr;
                *allOK = false;
            }
        }
    }

    return err;
}

DZÇÃÉRÅ[ÉhÇã@î\Ç≥ÇπÇÈÇ…ÇÕÅAÅuçÏê¨ÇµÇΩÉvÉâÉOÉCÉìÇ…ìnÇ∑ÉfÉXÉNÉäÉvÉ^Ç÷ÇÃÉ|ÉCÉìÉ^ÅvÇΔÅAÅuçÏê¨ÇµÇΩÉvÉâÉOÉCÉìÇ™èàóùÇ≈Ç´ÇÈÉfÉXÉNÉäÉvÉ^ÇÃéÌófiÅvǪǵǃÅuÉuÅ[Éãíl (džÇÈÉfÉXÉNÉäÉvÉ^Ç™ì¡íËÇÃÉ^ÉCÉvÇÃÉfÉXÉNÉäÉvÉ^ÇæÇØÇäiî[ǵǃǢÇÈǩǫǧǩDžÇÊÇËê›íËÇ∑ÇÈLJÇÃ) Ç÷ÇÃÉ|ÉCÉìÉ^ÅvÇìnÇ∑ïKóvǙdžÇËÇ‹Ç∑ÅBÉfÉXÉNÉäÉvÉ^ÇèàóùÇ∑ÇÈÇΔÇ´ÇÕÅADZÇÍÇΔìØólÇÃçƒãAåƒÇ—èoǵǙïKóvÇ≈Ç∑ÅB


Pete Gontier
Worldwide Developer Technical Support